package algorithme;

import org.jgrapht.graph.DefaultEdge;


public class WeightedEdge<V>  extends DefaultEdge implements Comparable<Object> {
	
	private V v1;
	private V v2;
	private float weight;
	
	
	/**
	 * Constructeur de base
	 * @param v1 sommet origine
	 * @param v2 sommet extremite
	 * poids de l'arc = 1
	 */
	public WeightedEdge(V v1, V v2) {
		this.v1=v1;
		this.v2=v2;
		this.weight = 1;
	}
	
	public WeightedEdge(WeightedEdge<V> arc) {
		this.v1=arc.getV1();
		this.v2=arc.getV2();
		this.weight = arc.getWeight();
	}
	/**
	 * Constructeur
	 * @param v1 sommet origine
	 * @param v2 sommet extremite
	 * @param d poids de l'arc
	 */
	public WeightedEdge(V v1, V v2, float d) {
		this.v1=v1;
		this.v2=v2;
		this.weight = d;
	}


	/**
	 * retourne le sommet source
	 * @return v1
	 */
	public V getV1() {
		return v1;
	}

	/**
	 * modifier le sommet source
	 * @param v1 nouveau sommet origine
	 */
	public void setV1(V v1) {
		this.v1 = v1;
	}

	/**
	 * retourne le sommet extremite
	 * @return v2
	 */
	public V getV2() {
		return v2;
	}

	/**
	 * modifie le sommet extremite
	 * @param v2
	 */
	public void setV2(V v2) {
		this.v2 = v2;
	}

	/**
	 * retourne le poids de l'arc
	 * @return weight
	 */
	public float getWeight() {
		return weight;
	}

	/**
	 * modifie le poids de l'arc
	 * @param weight
	 */
	public void setWeight(float weight) {
		this.weight = weight;
	}

	

	/**
	 * fonction de comparaison de deux WeightedEdge
	 * utile pour le tri
	 */
	public int compareTo(Object o) {
		WeightedEdge<V> v = (WeightedEdge<V>) o;
		return ((Float)this.weight).compareTo(v.weight);
	}

	
	public String toString() {
        return "["+v1.toString() +","+ v2.toString()+"] "+String.valueOf(weight);
    }
	
}
